返回首页
最新
特别是对于包含代码的技术书籍
我为智能眼镜开发了一款免提的抬头显示器(HUD),能够运行现实世界的速通计时器,并根据摄像头所见自动进行分段。演示场景:制作寿司。<p>演示视频:<a href="https://www.youtube.com/watch?v=NuOVlyr-e1w" rel="nofollow">https://www.youtube.com/watch?v=NuOVlyr-e1w</a><p>代码库:<a href="https://github.com/RealComputer/GlassKit" rel="nofollow">https://github.com/RealComputer/GlassKit</a><p>我最初尝试使用多模态大语言模型进行场景理解,但由于延迟和一致性不够理想,因此我转向了一个小型物体检测模型(微调的RF-DETR)。该模型仅在摄像头视频流上运行推理循环。这也使得设备本地/离线使用成为可能(目前仍通过本地服务器运行)。
嗨,HN,
我们花了一年时间构建AI代理,但一直遇到同样的问题:提示工程(prompt engineering)并不像软件工程那样。它更像是在猜测。
我们创建了OpenSymbolicAI,旨在将代理开发转变为真正的编程。它是一个开源框架(MIT许可证),允许您使用类型化原语、明确的分解和单元测试来构建代理。
主要问题:上下文窗口的滥用
大多数代理框架(如ReAct)迫使您将工具输出重新放入LLM(大型语言模型)的上下文窗口,以决定下一步。
代理搜索数据库。
代理返回50KB的JSON。
您将这50KB的内容粘贴回提示中,只是为了问“我接下来该做什么?”
这既慢又昂贵,还会让模型感到困惑。
解决方案:将数据作为变量
在OpenSymbolicAI中,LLM生成一个操作变量的计划(代码)。实际的重数据(搜索结果、PDF内容、API负载)存储在Python/运行时变量中,直到某个特定原语真正需要读取它时,才会传递给LLM上下文。
可以将其视为代理的引用传递。LLM操作变量句柄(文档),而Python运行时存储实际数据。
示例:RAG代理
与其让LLM基于一堆文本进行幻觉式的计划,不如直接编写逻辑来操作数据容器。
```python
class ResearchAgent(PlanExecute):
@primitive
def retrieve_documents(self, query: str) -> list[Document]:
"""从向量数据库中获取重文档。"""
# 返回保持在Python内存中的重对象
return vector_store.search(query)
@primitive
def synthesize_answer(self, docs: list[Document]) -> str:
"""利用文档生成答案。"""
# 这是唯一一步实际读取文档文本
context = "\n".join([d.text for d in docs])
return llm.generate(context)
@decomposition(intent="Research quantum computing")
def _example_flow(self):
# LLM生成此执行计划。
# 关键是:LLM管理'docs'变量符号,
# 但在规划过程中从未看到其内部的庞大负载。
docs = self.retrieve_documents("当前量子计算的状态")
return self.synthesize_answer(docs)
```
agent = ResearchAgent()
agent.run("研究固态电池的最新进展")
讨论
我们希望听到社区的反馈:
您在提示工程的脆弱性方面遇到了哪些困难?
什么会让您愿意尝试将提示视为代码?
还有哪些领域可以让这种方法大放异彩?
为了使其适用于您的用例,缺少什么才能使其准备好投入生产?
代码故意保持简单的Python,没有魔法,没有框架锁定。如果这种方法引起共鸣,您可以轻松地根据您的具体需求进行调整或与现有代码库集成。
代码库:
核心(Python): [https://github.com/OpenSymbolicAI/core-py](https://github.com/OpenSymbolicAI/core-py)
文档: [https://www.opensymbolic.ai/](https://www.opensymbolic.ai/)
博客(技术深入): [https://www.opensymbolic.ai/blog](https://www.opensymbolic.ai/blog)